package main

import (
	"fmt"
	"sort"
	// "strings"
)

// 把map对象的key放在一个切片
func mapSort(map1 map[string]string) string{
	var sliceKey []string
	for key,_ :=range map1{
		sliceKey =append(sliceKey,key)
	}
	// 对key进行升序排序
	sort.Strings(sliceKey)
	var str string
	for _,v :=range sliceKey{
		str +=fmt.Sprintf("%v=>%v",v,map1[v])
	}
	return str

}
func main() {
	// make创建map类型的数据
	// var userinfo = make(map[string]string)
	// userinfo["username"] = "张三"
	// userinfo["age"] = "20"
	// userinfo["sex"] = "男"
	// fmt.Println(userinfo)
	// // 只获取username的值
	// fmt.Printf(userinfo["username"])
	// map也支持在声明的时候填充元素
	// var userinfo=map[string]string{
	// 	"username":"张三",
	// 	"age":"20",
	// 	"sex":"男",
	// }
	// fmt.Println(userinfo)
	//  userinfo :=map[string]string{
	// 		"username":"张三",
	// 		"age":"20",
	// 		"sex":"男",
	// 	}
	// 	fmt.Println(userinfo)
	//  var userinfo=map[string]string{
	// 	"username":"张三",
	// 	"age":"20",
	// 	"sex":"男",
	// }
	// fmt.Printf(userinfo["username"])
	// for range循环遍历map类型数据
	// for k,v :=range userinfo{
	// 	fmt.Printf("key:%v value:%v",k,v)
	// }
	// 创建map类型数据的curd
	// 创建修改map类型的数据
	// var userinfo =make(map[string]string)
	// userinfo["username"]="张三"
	// userinfo["age"]="20"
	// fmt.Println(userinfo)
	// 2 创建 修改map类型的数据
	// var userinfo =map[string]string{
	// 	"username":"张三",
	// 	"age":"20",
	// }
	// userinfo["username"]="李四"
	// fmt.Println(userinfo)
	// 获取 查找map类型的数据
	
	// v,ok :=userinfo["age"]
	// fmt.Println(v,ok)
	// v,ok :=userinfo["xxxx"]
	// fmt.Printf(v,ok)

	// 4 删除map数据里面的键值对
	// var userinfo=map[string]string{
	// 	"username":"张三",
	// 	"age":"20",
	// 	"sex":"男",
	// 	"height":"180cm",
	// }
	// fmt.Println(userinfo)
	// // 删除delete 
	// delete(userinfo,"sex")
	// fmt.Println(userinfo)

	// 我们想在切片里面放一系列用户的信息，定义一个元素为map类型的切片
	// var userinfo =[]string{"张三","李四"} //定义数组切片
	// var userinfo =make([]map[string]string,3,3)  //元素为map类型的切片
	// // fmt.Println(userinfo[0]) //map[] map不初始化默认值为nil
	// // fmt.Println(userinfo[0]==nil)  //true
	// if userinfo[0] ==nil{
	// 	userinfo[0] =make(map[string]string)
	// 	userinfo[0]["username"]="张三"
	// 	userinfo[0]["age"]="20"
	// 	userinfo[0]["height"]="180cm"
	// }
	// if userinfo[1] ==nil{
	// 	userinfo[1] =make(map[string]string)
	// 	userinfo[1]["username"]="李四"
	// 	userinfo[1]["age"]="22"
	// 	userinfo[1]["height"]="170cm"
	// }
	// if userinfo[2] ==nil{
	// 	userinfo[2] =make(map[string]string)
	// 	userinfo[2]["username"]="王五"
	// 	userinfo[2]["age"]="23"
	// 	userinfo[2]["height"]="190cm"
	// }

	// fmt.Println(userinfo)

	// // 遍历
	// for _,val :=range userinfo{
	// 	// fmt.Println(val)
	// 	for key,v :=range val {
	// 		fmt.Printf("key:%v---value:%v\n",key,v)
			
	// 	}
	// }

	// 如果我们想在map对象中存放一系列的属性 我们就可以把map类型的值定义成切片
	// var userinfo =make(map[string]string)
	// userinfo["username"]="张三"
	// userinfo["hobby"]="睡觉"
	// 定义map的值为切片类型的map对象
	// var userinfo =make(map[string][]string)
	// userinfo["hobby"]=[]string{
	// 	"吃饭",
	// 	"睡觉",
	// 	"敲代码",
	// }
	// userinfo["work"]=[]string{
	// 	"php",
	// 	"java",
	// 	"C语言",
	// }
	// // fmt.Println(userinfo)
	// for _,v2 :=range userinfo{
	// 	// fmt.Printf("%v----%v",key,v2)
	// 	// 打印切片里面每个值
	// 	for _,value := range v2{
	// 		fmt.Printf(value)
	// 	}
	// }

	// map类型也是引用数据类型
	// var userinfo=make(map[string]string)
	// userinfo["username"]="张三"
	// userinfo["age"]="20"
	// userinfo1:=userinfo
	// fmt.Println(userinfo1)
	// fmt.Println(userinfo)
	// userinfo1["username"]="李四"
	// fmt.Println(userinfo)
	// fmt.Println(userinfo1)



	// map类型的排序
	// map1 :=make(map[int]int,10)
	// map1[10]=100
	// map1[1]=13
	// map1[4]=56
	// map1[8]=9
	// map1[2]=10
	// map1[9]=16
	// map1[3]=58
	// map1[7]=7

	
	
	// // 需求 按照key升序输出map的key=>value
	// // 把map的key放在切片里面
	// var keySice []int
	// for key,_ :=range map1{
	// 	keySice =append(keySice, key)
	// }
	// fmt.Println(keySice)  

	// // //让key进行升序排序
	// sort.Ints(keySice)
	// fmt.Println(keySice)  //

	// // 循环遍历key输出map的值
	// for _,v :=range keySice{
	// 	fmt.Printf("key=%v  value=%v\n",v,map1[v])
	// }

	// 按照key升序输出map的key-》value(签名算法)
	//
	// this is golang 
	// var str ="how do u do"
	// var strSlice = strings.Split(str," ")
	// fmt.Println(strSlice)

	// var strMap =make(map[string]int)
	// for _,v:=range strSlice {
	// 	strMap[v]++

	// }
	// fmt.Println(strMap)

	m1 :=map[string]string{
		"username":"zhangsan",
		"age":"20",
		"sex":"男",
		"height":"180",
	}
	str :=mapSort(m1)
	fmt.Println(str)
}